package com.hightrast.service.api.entity;

import com.hightrast.service.api.baseEntity.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.math.BigDecimal;

/**
 * <p>
 * 订单商品项表
 * </p>
 *
 * @author hx
 * @since 2025-01-24
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@ApiModel(value="RastOrderProductItems对象", description="订单商品项表")
public class RastOrderProductItems extends BaseEntity {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "关联订单ID")
    private Long orderId;

    @ApiModelProperty(value = "商品下单时所属的设计师")
    private Long userId;

    @ApiModelProperty(value = "商品变体ID")
    private Long variantId;

    @ApiModelProperty(value = "商品名称")
    private String title;

    @ApiModelProperty(value = "商品数量")
    private Integer quantity;

    @ApiModelProperty(value = "商品SKU")
    private String sku;

    @ApiModelProperty(value = "商品变体名称")
    private String variantTitle;

    @ApiModelProperty(value = "供应商名称")
    private String vendor;

    @ApiModelProperty(value = "配送服务")
    private String fulfillmentService;

    @ApiModelProperty(value = "商品ID")
    private Long productId;

    @ApiModelProperty(value = "是否需要配送")
    private Integer requiresShipping;

    @ApiModelProperty(value = "是否需缴税")
    private Integer taxable;

    @ApiModelProperty(value = "是否为礼品卡")
    private Integer giftCard;

    @ApiModelProperty(value = "商品名称")
    private String name;

    @ApiModelProperty(value = "库存管理方式")
    private String variantInventoryManagement;

    @ApiModelProperty(value = "商品是否存在")
    private Integer productExists;

    @ApiModelProperty(value = "可配送数量")
    private Integer fulfillableQuantity;

    @ApiModelProperty(value = "商品重量（克）")
    private Integer grams;

    @ApiModelProperty(value = "商品价格")
    private String price;

    @ApiModelProperty(value = "最终价格")
    private String preTaxPrice;

    @ApiModelProperty(value = "当前商品下单时的佣金率")
    private BigDecimal commissonRate;


    @ApiModelProperty(value = "商品折扣")
    private String totalDiscount;

    @ApiModelProperty(value = "商品折扣类型")
    private String discountType;

    @ApiModelProperty(value = "发货状态")
    //null：一般代表该订单的履行状态还未被初始化或者还没有相关的履行信息。可能是订单刚刚创建，系统还没开始处理订单项的履行情况。
    //fulfilled：表示订单已经完全履行，即订单下的所有订单项都已经完成了相应的处理流程，比如商品已经全部发货、服务已经全部提供等。
    //partial：意味着订单是部分履行的状态。也就是订单中的一部分订单项已经完成了履行，而还有部分订单项未完成。例如，一个订单包含三件商品，其中两件已经发货，那么该订单的fulfillment_status就是partial。
    //not_eligible：说明该订单不符合履行条件。可能是由于订单的某些属性不符合业务规则，比如支付未完成、商品缺货且无法补货等原因，导致订单不能进入履行流程。
    private String fulfillmentStatus;

    @ApiModelProperty(value = "GraphQL API ID")
    private String adminGraphqlApiId;

    @ApiModelProperty(value = "订单状态，1-Goods Received 已到货，2-Return Goods 已退款，3-In Transit 进行中")
    private Integer orderStatus;

    //根据orderStatus 如果货物已经到了，那么就是默认Issuing状态，如果货物已经退款的话，那么就是Not issued状态，然后还剩一个Issued状态的话就需要管理员手动去设置
    @ApiModelProperty(value = "佣金发放状态，1-Issuing 发放中，2-Not issued 不发放，3-Issued 已发放")
    private Integer paybackStatus;

    @ApiModelProperty(value = "商品项id 如果是原商品项id-为空，为退款项商品-当前字段等于原商品项id")
    private Long primaryItemId;

}
